import 'package:enjoy_plus/utils/toast.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart';

class LocationList extends StatefulWidget {
  const LocationList({super.key});

  @override
  State<LocationList> createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {
  Future<void> requestLocationPermission() async {
    PermissionStatus status = await Permission.location.request();
    // Geolocator.requestPermission();
    if (status.isGranted) {
      // 权限未授予
      getCurrentLocation();
      ToastUtil.showSuccess('位置权限授予');
    } else {
      // 权限未授予
      ToastUtil.showError('位置权限未授予, 请去设置中心开启');
    }
  }

/**
 * 异步获取当前设备的位置信息。
 * 
 * 此方法首先根据设备的平台（Android、iOS/macOS 或 Web）配置不同的定位设置，
 * 然后使用这些设置获取设备的当前位置，并处理位置信息或异常。
 */
  Future<void> getCurrentLocation() async {
    late LocationSettings locationSettings;

    if (defaultTargetPlatform == TargetPlatform.android) {
      locationSettings = AndroidSettings(
          accuracy: LocationAccuracy.high,
          distanceFilter: 100,
          forceLocationManager: true,
          intervalDuration: const Duration(seconds: 10),
          //(Optional) Set foreground notification config to keep the app alive
          //when going to the background
          foregroundNotificationConfig: const ForegroundNotificationConfig(
            notificationText:
                "Example app will continue to receive your location even when you aren't using it",
            notificationTitle: "Running in Background",
            enableWakeLock: true,
          ));
    } else if (defaultTargetPlatform == TargetPlatform.iOS ||
        defaultTargetPlatform == TargetPlatform.macOS) {
      locationSettings = AppleSettings(
        accuracy: LocationAccuracy.high,
        activityType: ActivityType.fitness,
        distanceFilter: 100,
        pauseLocationUpdatesAutomatically: true,
        // Only set to true if our app will be started up in the background.
        showBackgroundLocationIndicator: false,
      );
    } else {
      locationSettings = LocationSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
      );
    }
    try {
      // 使用配置好的定位设置获取当前位置
      Position position = await Geolocator.getCurrentPosition();
      // 显示成功获取到的纬度和经度
      ToastUtil.showSuccess('${position.latitude}, ${position.longitude}');
    } catch (e) {
      // 处理可能出现的异常
      print(e.toString());
    }

    // if (defaultTargetPlatform == TargetPlatform.android) {
    //   // 针对Android平台，设置高精度定位、100米距离过滤、强制使用位置管理器等
    //   locationSettings = AndroidSettings(
    //       accuracy: LocationAccuracy.high,
    //       distanceFilter: 100,
    //       forceLocationManager: true,
    //       intervalDuration: const Duration(seconds: 10),
    //       foregroundNotificationConfig: const ForegroundNotificationConfig(
    //         notificationText:
    //             "Example app will continue to receive your location even when you aren't using it",
    //         notificationTitle: "Running in Background",
    //         enableWakeLock: true,
    //       ));
    // } else if (defaultTargetPlatform == TargetPlatform.iOS ||
    //     defaultTargetPlatform == TargetPlatform.macOS) {
    //   // 针对iOS和macOS平台，设置高精度定位、健身活动类型、100米距离过滤等
    //   locationSettings = AppleSettings(
    //     accuracy: LocationAccuracy.high,
    //     activityType: ActivityType.fitness,
    //     distanceFilter: 100,
    //     pauseLocationUpdatesAutomatically: true,
    //     // 只有在应用在后台启动时才设置为true
    //     showBackgroundLocationIndicator: false,
    //   );
    // } else if (kIsWeb) {
    //   // 针对Web环境，设置高精度定位、100米距离过滤、5分钟的最大年龄等
    //   // locationSettings = WebSettings(
    //   //   accuracy: LocationAccuracy.high,
    //   //   distanceFilter: 100,
    //   //   maximumAge: const Duration(minutes: 5),
    //   // );
    // } else {
    //   // 对于其他平台，默认设置高精度定位和100米距离过滤
    //   locationSettings = const LocationSettings(
    //     accuracy: LocationAccuracy.high,
    //     distanceFilter: 100,
    //   );
    // }
  }

  @override
  void initState() {
    // TODO: implement initState
    requestLocationPermission();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('选择社区'),
      ),
      body: ListView(
        padding: const EdgeInsets.all(10),
        children: [
          const Row(
            children: [
              Text(
                '当前地址',
                style: TextStyle(color: Colors.grey),
              )
            ],
          ),
          const SizedBox(height: 10),
          Container(
            color: Colors.white,
            padding: const EdgeInsets.all(10),
            child: const Row(
              children: [
                Expanded(child: Text('北京市昌平区政府街19号')),
                Row(
                  children: [
                    Icon(Icons.location_searching_outlined, color: Colors.blue),
                    SizedBox(width: 2),
                    Text(
                      '重新定位',
                      style: TextStyle(color: Colors.blue),
                    ),
                  ],
                )
              ],
            ),
          ),
          const SizedBox(height: 10),
          const Row(
            children: [
              Text(
                '附近社区',
                style: TextStyle(color: Colors.grey),
              )
            ],
          ),
          const SizedBox(height: 10),
          ListView(
            shrinkWrap: true,
            physics: const NeverScrollableScrollPhysics(),
            children: [
              Container(
                color: Colors.white,
                padding: const EdgeInsets.all(10),
                child: const Row(
                  children: [
                    Expanded(child: Text('北京市昌平区政府街19号')),
                    Row(
                      children: [
                        Icon(Icons.arrow_forward_ios,
                            size: 16, color: Colors.black),
                      ],
                    )
                  ],
                ),
              )
            ],
          )
        ],
      ),
    );
  }
}
